#include "stm32f4xx.h"                  // Device header
#include "stm32f4xx_gpio.h"

void delay_s(int n)
{
	for (int j = 0; j < n; j++);
	for (int i = 0; i < 1000000; i++);
}

int main()
{
	/* 第一步: 开启 GPIO 端口的时钟 */
	/* GPIO 挂载在 AHB1 总线 */
	RCC_AHB1ENR |= (0x01 << 5);       /*GPIOF 外设时钟使能*/
	
	/* 第二步: 配置 GPIO */
	/* PF6, 7, 8 通用输出 + 推挽 + 上拉*/
	GPIO_InitTypedef GPIO_InitStruct = {0};
	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;  /* 引脚 */
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out;                         /* 通用输出 */
	GPIO_InitStruct.GPIO_PuPd  = GPIO_PuPd_UP;                          /* 上拉 */
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;                         /* 推挽输出 */
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;                       /* 50MHz 翻转速度*/
	GPIO_Init(GPIOF, &GPIO_InitStruct);

	// 拉高
	// GPIO_SetBits(GPIOF, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
		
	/* 第三步: 控制 GPIO 的数据输出寄存器*/
	while(1)
	{
		/* PF6 输出低电平, 其他两个高电平 */
		GPIO_SetBits(GPIOF, GPIO_Pin_7 | GPIO_Pin_8);
		GPIO_ResetBits(GPIOF, GPIO_Pin_6);
		delay_s(1);
		
		/* PF7 输出低电平, 其他两个高电平 */
		GPIO_SetBits(GPIOF, GPIO_Pin_6 | GPIO_Pin_8);
		GPIO_ResetBits(GPIOF, GPIO_Pin_7);
		delay_s(1);
		
		/* PF8 输出低电平, 其他两个高电平 */
		GPIO_SetBits(GPIOF, GPIO_Pin_6 | GPIO_Pin_7);
		GPIO_ResetBits(GPIOF, GPIO_Pin_8);
		delay_s(1);
	}
}

void SystemInit(void){}
